package ml.ml.Clases;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;

import ml.ml.Dao.ComentarioDAO;
import ml.ml.Dao.PublicacionDAO;
import ml.ml.Dao.TransaccionistaDAO;

import org.apache.commons.lang.ObjectUtils;
import org.easycassandra.annotations.Index;

/**
 * @author martin
 *
 */
@Entity(name = "transaccionista")
public class Transaccionista {
	 
	
	@Id
	private String dni;
	
	@Index
	@Column(name = "nombre")
	private String nombre = "";
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}


	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}


//	@Column(name = "apellido")
	//private String apellido = "";
	
	@Column(name = "email")
	private String email = "";
	
//	@Column(name = "telefono")
//	private String telefono = "";
	
//	@Column(name = "celular")
//	private String celular = "";

    
    public String getDni() {
		return dni;
	}

	public void setDni(String dni) {
		this.dni = dni;
	}
	
	/* 
		La idea de utilizar ventas en los transaccionistas
		es poder acceder mas rapidamente a los datos del mismo, sin tener que filtrar 
		una nueva tabla de ventas con sus trasaccionistas y bla. Esta propiedad guarda
		unicamente ventas concretadas.
	 */
	
	@Column(name = "ventas")
    private CassandraList<String> ventas = new CassandraList<String>();

    @Column(name = "compras")
    private List<String> compras;
    
	/* 
		La idea de utilizar ventas en los transaccionistas
		es poder acceder mas rapidamente a los datos del mismo, sin tener que filtrar 
		una nueva tabla de ventas con sus trasaccionistas y bla. Esta propiedad guarda
		unicamente ventas concretadas.
	 */
    

	public Transaccionista(final String dni, final String nombre, final String email) {
        this.setDni(dni);
        this.setNombre(nombre);
        this.setEmail(email);
        TransaccionistaDAO.getInstance().create(this);
    }
    
    public Transaccionista(){
    	
    }

    /* Desde acá se muestran getters y setters */

    
    public CassandraList<String> getVentas() {
        return this.ventas;
    }

    public void setVentas(final CassandraList<String> ventas) {
        this.ventas = ventas;
    }

    public List<String> getCompras() {
        return this.compras;
    }

    public void setCompras(final CassandraList<String> compras) {
        this.compras = compras;
    }

    /*                      */

    @Override
    public boolean equals(final Object obj) {
        if (obj == null) {
            return false;
        }
        if (this.getClass() != obj.getClass()) {
            return false;
        }
        final Transaccionista other = (Transaccionista) obj;
        if (!ObjectUtils.equals(this.getDni(), other.getDni())) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 97 * hash + ObjectUtils.hashCode(this.getDni());
        return hash;
    }

    public void comprar(final Publicacion publicacion) {
        this.getCompras().add(publicacion.toString());
        // PERSISTIR A CASSANDRA
        
    }
    
    public void vender(String pub, String usr){
    	Publicacion publicacion = (Publicacion) PublicacionDAO.getInstance().retrieve(pub);
    	publicacion.setUsrcomprador(usr);
    	PublicacionDAO.getInstance().update(publicacion);
    }
    
    public void Publicar(String codigoPub, String producto, String precio){
    	Publicacion pub = new Publicacion(codigoPub, producto, precio, this.getDni());
    	this.getVentas().add(pub.toString());
    	TransaccionistaDAO.getInstance().update(this);
    }
    
    public void MostrarPublicacion(String publicacion){
    	Publicacion pub = PublicacionDAO.getInstance().retrieve(publicacion);
    	Transaccionista vendedor = TransaccionistaDAO.getInstance().retrieve(pub.getUsrid());
    	System.out.println("Producto : \t" + pub.getNombreprd() + "\t Precio: $" + pub.getPrecioPrd());
    	
    	System.out.println("Comentarios");
    	
    	for (String  com : pub.getComentarios()) {
    		Comentario comentario = ComentarioDAO.getInstance().retrieve(com.trim());
    		System.out.println(comentario.getPregunta());
    		if(!(comentario.getRespuesta().equals(""))){
    			Comentario respuesta = ComentarioDAO.getInstance().retrieve(comentario.getRespuesta());
    			System.out.println("\t" + "\t" + respuesta.getPregunta());
    		}
		}
    	
    }
        
}
